Storing and retrieving data on a hard disk or other storage media are essential to modern computing. For example, a host (e.g., a host computer) typically stores large amounts of data in an external memory. As such, it is important for the host to be able to quickly and accurately read and write data to the external memory.
In one conventional read/write command system, each command includes an identifier (e.g., an originator exchange identifier (OXID)) that uniquely identifies the command. Commands being processed at the same time typically cannot share the same OXID, and the total number of OXIDs available within a system may be limited. Thus, before a new command can be processed, the system must verify that an OXID assigned to the new command is not currently in use by (or assigned to) another command.
In such a conventional read/write command system, system firmware typically verifies each command OXID sequentially using various methods. For example, the system firmware may be required to manually compare the incoming commands OXID to a list of OXID's of commands currently in the queue. This wait (lag) time may further be increased if the system firmware must arbitrate with other commands to access an OXID from external memory. Since each OXID currently assigned to commands must be verified sequentially, the lag time in verifying each OXID may lead to wasted cycles in which other commands are not being processed at all.